Weitere Module- / Manifestbeispiele

 · 7 min read
 · Stefan Hellmann
Last updated: June 13, 2016

Mit folgendem Module kann ein User incl. Gruppe und Gruppenzugehörigkeit angelegt werden. Außerdem wird ihm direkt ein ssh-key hinterlegt: Zuerst muss der entsprechende Ordner angelegt werden:

class user_shellmann {
    group { 'shellmann':
        ensure => present,
        gid => 1000
    }
    user { 'shellmann':
        ensure => present,
        require    => Group['shellmann'],
        gid => 'shellmann',
        groups => ['sudo', 'cdrom', 'floppy', 'audio', 'dip', 'video', 'plugdev', 'netdev', 'bluetooth',],
        shell => '/bin/bash',
        home => '/home/shellmann',
        purge_ssh_keys => true,
    }
    ssh_authorized_key { 'private':
        user => 'shellmann',
        type => 'ssh-rsa',
        key => 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDSNp/edM111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111',
    }
}

Damit man dem Benutzer z.B. eigene Config Dateien zur Verfügung zu stellen, sollte vorher der Fileserver in Puppet konfiguriert werden.

# This file consists of arbitrarily named sections/modules
# defining where files are served from and to whom

# Define a section 'files'
# Adapt the allow/deny settings to your needs. Order
# for allow/deny does not matter, allow always takes precedence
# over deny
[dotfiles]
    path /mnt/puppet_dotfiles
    allow puppetclient.home

[plugins]
#  allow *.example.com
#  deny *.evil.example.com
#  allow 192.168.0.0/24

Über die allow Direktive kann man den Zugriff reglementieren. Bisher habe ich noch keine Möglichkeit gefunden ganze Netze frei zugeben. Im Netz taucht hier oft allow_ip auf. Dies funktionierte bei meinen Tests aber genau so wenig wie allow. Die Manifest wird dann wie folgt erweitert:

class user_shellmann {
    group { 'shellmann':
        ensure => present,
        gid => 1000
    }
    user { 'shellmann':
        ensure => present,
        require    => Group['shellmann'],
        gid => 'shellmann',
        groups => ['sudo', 'cdrom', 'floppy', 'audio', 'dip', 'video', 'plugdev', 'netdev', 'bluetooth',],
        shell => '/bin/bash',
        home => '/home/shellmann',
        purge_ssh_keys => true,
    }
    ssh_authorized_key { 'private':
        user => 'shellmann',
        type => 'ssh-rsa',
        key => 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDSNp/edM111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111',
    }
    file {'/home/shellmann/.vimrc':
        ensure => 'file',
        mode => '0660',
        owner => 'shellmann',
        group => 'shellmann',
        source => 'puppet:///dotfiles/user_shellmann/.vimrc',
    }
}

In meiner persönlichen vim config sind ein paar Ordner definiert, die noch nicht existieren. Auch dabei kann uns puppet helfen.

class user_shellmann {
    group { 'shellmann':
        ensure => present,
        gid => 1000
    }
    user { 'shellmann':
        ensure => present,
        require    => Group['shellmann'],
        gid => 'shellmann',
        groups => ['sudo', 'cdrom', 'floppy', 'audio', 'dip', 'video', 'plugdev', 'netdev', 'bluetooth',],
        shell => '/bin/bash',
        home => '/home/shellmann',
        purge_ssh_keys => true,
    }
    ssh_authorized_key { 'private':
        user => 'shellmann',
        type => 'ssh-rsa',
        key => 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDSNp/edM111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111',
    }
    file {'/home/shellmann/.vimrc':
        ensure => 'file',
        mode => '0660',
        owner => 'shellmann',
        group => 'shellmann',
        source => 'puppet:///dotfiles/user_shellmann/.vimrc',
    }
    file { '/home/shellmann/.vim':
        ensure => 'directory',
        owner  => 'shellmann',
        group  => 'shellmann',
        mode   => '0660',
    }
    file { '/home/shellmann/.vim/backup':
        ensure => 'directory',
        owner  => 'shellmann',
        group  => 'shellmann',
        mode   => '0660',
    }
    file { '/home/shellmann/.vim/swap':
        ensure => 'directory',
        owner  => 'shellmann',
        group  => 'shellmann',
        mode   => '0660',
    }
}